#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//                                                                       指针变量的创建
// int main()
// {
//     int a = 10;//a创建在内存上
//     &a;
//     int* p = &a;//存放指针/地址的变量-指针变量
//     //指针变量是用来存放地址的
//     char ch = 'w';
//     char * pc = &ch;
//     return 0;
// }

// int main()
// {
//    int a = 10;
//    int * pa = &a;
//    *pa;//解引用操作
//     * pa = 20;
//     printf("%d\n", a);  
//     return 0;
// }

// int main()
// {
//     int a = 10;
//     int b = 20;
//     int *p1;
//     int *p2;
//     int *p1,*p2;//p1,p2都为指针
//     int *p1,p2;//p1是指针，p2为整形    
//     return 0;
// }

// int main()
// {
//     int a = 10;
//     int * pa = &a;
//     printf("%d\n", *pa);
//     printf("%x\n", pa);
//     printf("%p\n", pa);
//     printf("%p\n", a);
//     return 0;
// }

//                                                           按先大后小的顺序输出a和b
// int main()
// {
//     int a = 0;
//     int b = 0; 
//     scanf("%d%d", &a, &b);
//     int * pa = &a;
//     int * pb = &b;
//     if (a < b)
//     {
//         int * p;
//         p = pa;
//         pa = pb;
//         pb = p;
//     }
//     printf("%d %d\n", *pa, *pb);
//     return 0;
// }

// void swap(int x, int y)
// {
//     int z = 0;
//     z = x;
//     x = y;
//     y = z;
// }
// void swap2(int * pa, int * pb)
// {
//     int tmp = 0;
//     tmp = * pa;
//     *pa = *pb;
//     *pb = tmp;
// }
// int main()
// {
//     int a = 10;
//     int b = 20;
//     printf("交换前：a = %d b = %d\n", a, b);
//     swap(a,b);
//     printf("交换后：a = %d b = %d\n", a, b);
//     swap2(&a, &b);
//     printf("2交换后：a = %d b = %d\n", a, b);

//     return 0;
// }

//                                                                        三个值从大到小输出
// void swap2(int * pa, int * pb)
// {
//     int tmp = 0;
//     tmp = * pa;
//     *pa = *pb;
//     *pb = tmp;
// }
// void Exchange(int * p1, int *p2, int * p3)
// {
//     if (*p1 < *p2)
//     {
//         swap2(p1, p2);
//     }
//     if (* p1 < *p3)
//     {
//         swap2(p1, p3);
//     }
//     if (*p2 < *p3)
//     {
//         swap2(p2, p3);
//     }
// }
// int main()
// {
//     int a = 0;
//     int b = 0;
//     int c = 0;
//     scanf("%d %d %d", &a, &b, &c);
//     Exchange(&a, &b, &c);
//     printf("%d %d %d\n",a, b, c);

//     return 0;
// }

//                                                           指针引用数组
// int main()
// {
//     int a = 10;
//     &a;
//     int arr[10] = {0};
//     int * p = &arr[0];
//     int * p = arr;//数组名是数组首元素地址
//     return 0;
// }
//                                                             方法一
// int main()
// {
//     int arr[10] = {0};
//     int i = 0;
//     for ( i = 0; i < 10; i++)
//     {
//         printf("%d ",arr[i]);
//     }
//     int * p = arr;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%p  ====> %p\n", p+i, &arr[i]);
//     }
//     return 0;
// }
//                                                                           方法二
// int main()
// {
//     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//     int i = 0;
//     int * p = arr;
//     for ( i = 0; i < 10; i++)
//     {
//         printf("%d ", *(p + i));
//     }
//     return 0;
// }
//                                                                      指针相减
// int main()
// {
//     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//     int * p1 = &arr[0];
//     int * p2 = &arr[9];
//     printf("%d\n", p2 - p1);//指针 - 指针
//     return 0;
// }
//                                                                   方法三
// int main()
// {
//     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//     int * p = arr;
//     int i = 0;
//     for ( i = 0; i < 10; i++)
//     {
//         printf("%d ", *p);
//         p++;
//     }
//     return 0;
// }


// void set(int * p)
// {
//     int i = 0;
//     for ( i = 0; i < 10; i++)
//     {
//         *p = i;
//         p++;
//     } 
// }
// void print(int * p)
// {
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ", *p++);
//     }
// }
// int main()
// {
//     int arr[10] = {0};
//     int * p = arr;
//     //数组名是首元素地址  int类型
//     set(arr);//能把arr的内容设置为0-9
//     print(arr);//把数组内容进行打印
//     return 0;
// }

//                                                                     将数组按相反顺序存放
// void print(int * p, int sz)
// {
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ", *p++);
//     }
// }
// // void Move(int arr[], int sz)
// // {
// //     int left = 0;
// //     int right = sz - 1;
// //     while (left < right)
// //     {
// //         int tmp = arr[left];
// //         arr[left] = arr[right];
// //         arr[right] = tmp;
// //         left++;
// //         right--;
// //     }
// // }
// void Move2(int *p, int sz)
// {
//     int * left = p;
//     int * right = p+sz-1;
//     while (left < right)
//     {
//         int tmp = *left;
//         *left = *right;
//         *right = tmp;
//         left++;
//         right--;
//     }
    
// }
// int main()
// {
//     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//     //Move(arr, 10);
//     Move2(arr, 10);
//     print(arr, 10);
//     return 0;
// }


//                                                                输出二维数组
// int main()
// {
//     int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
//     int * p = &arr[0][0];
//     int i = 0;
//     for ( i = 0; i < 12; i++)
//     {
//         printf("%d ", *(p + i));
//     }
//     return 0;
// }
// int main()
// {
    
//     return 0;
// }
// int main()
// {
//     int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
//     int * p = &arr[0][0];
//     //int * p = arr[0];//两者相同
//     int i = 0;
//     for (i = 0; i < 12; i++)
//     {
//         printf("%d ", * (p + i));
//     }
//     return 0;
// }

//                                             输出二维数组任一行任一列元素的值
// int main()
// {
//     int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
//     int (*p)[4] = arr;//第一行的地址-一维数组的地址（int [4]）
//     int i = 0;
//     for(i = 0; i < 3; i++)
//     {
//         int j = 0;
//         for ( j = 0; j < 4; j++)
//         {
//             printf("%d ", *(*(p + i) + j));
//         }
//     }
//     return 0;
// }

//                                                                      用指向数组的指针作函数参数
// void print(int (*p)[4], int row, int col)
// {
//     int i = 0;
//     int j = 0;
//     for ( i = 0; i < row; i++)
//     {
//         for (j = 0; j < col; j++)
//         {
//             printf("%d ", *(*(p + i) +j));
//         }
//     }
// }                                        
// int main()
// {
//     int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
//     print(arr, 3, 4);//负责打印arr中的内容
//     return 0;
// }

//                                                                   通过字符指针变量引用字符串
// int main()
// {
//     char arr[] = "hello world";
//     printf("%c\n", arr[6]);
//     printf("%s\n", arr);
//     return 0;
// }

// int main()
// {
//     char *str = "hello world";
//     printf("%s\n", str);
//     return 0;
// }

//                                                                   将字符串a复制给字符串b
// int main()
// {
//     char a[20] = "i am a student";
//     char b[20] = {0};
//     // int i = 0;
//     // for (i = 0; a[i] != '\0'; i++)
//     // {
//     //     b[i] = a[i];
//     // }
//     // b[i] = a[i];
//     // int i = 0;
//     // while (a[i] != '\0')
//     // {
//     //     b[i] = a[i];
//     //     i++;
//     // }
//     // b[i] = a[i];
//     int i = 0;
//     char *pa = a;
//     char *pb = b;
//     while (*(pa + i) != '\0')
//     {
//         *(pb + i) = *(pa + i);
//         i++;
//     }
//     *(pb + i) = *(pa + i);
    
//     printf("%s\n", b);
//     return 0;
// }
// void copy_string(char *from, char *to)
// {
//     while (*from != '\0')
//     {
//         *to++ = *from++;
//     }
//     *to = *from;
// }
// int main()
// {
//     char a[] = "i am a student";
//     char b[20] = { 0 };
//     copy_string(a, b);
//     printf("%s\n", b);
//     return 0;
// }
// int main()
// {
//     char a[] = "i am a student";
//     char b[20] = { 0 };
//     strcpy(b, a);
//     printf("%s\n", b);
//     return 0;
// }

// int main()
// {
//     char *p = "abcdef";
//     char arr[] = "abcdef";
    
//     return 0;
// }


//                                                                         函数指针
// int Add(int x, int y)
// {
//     return x + y;
// }
// int main()
// {
//     printf("%p\n", Add);
//     int ret = (*Add)(1, 2);
//     printf("%d\n", ret);
//     return 0;
// }

// int Add(int x, int y)
// {
//     return x + y;
// }
// int main()
// {
//     //函数指针pAdd，是指向Add的函数
//     int (*pAdd)(int, int) = Add;//函数名就是函数的地址
//     int ret = (*pAdd)(2, 3);
//     printf("%d\n", ret);
//     return 0;
// }
// void copy_string(char *from, char *to)
// {
//     while (*to++ = *from++)
//     {
//         ;
//     }
// }
// int main()
// {
//     char a[] = "abcdef";
//     char b[20] = {0};
//     void (*cp)(char*, char*) = copy_string;
//     (*cp)(a, b);
//     printf("%s\n", b);
//     return 0;
// }

//                                                       输入数字选择输出最大值还是最小值
// int Max(int x, int y)
// {
//     return x > y ? x : y;
// }
// int Min(int x, int y)
// {
//     return x < y ? x : y;
// }
// int main()
// {
//     int a = 0;
//     int b = 0;
//     int n = 0;
//     int (*pf)(int, int);
//     printf("请输入两个数字：》");
//     scanf("%d%d", &a, &b);
//     printf("请选择（1/2）：>");
//     scanf("%d", &n);
//     if (n ==1)
//     {
//         pf = Max;
//     }
//     else if (n == 2)
//     {
//         pf = Min;
//     }
//     int ret = (*pf)(a, b);
//     printf("%d\n", ret);
//     return 0;
// }


//                                                                用指向函数的指针作函数参数
// void menu()
// {
//     printf("************************************\n");
//     printf("******* 1.add       2.sub       ****\n");
//     printf("******* 3.mul       4.div       ****\n");
//     printf("******* 0.exit                  ****\n");
//     printf("************************************\n");
// }
// int Add(int x, int y)
// {
//     return x + y;
// }
// int Sub( int x, int y)
// {
//     return x - y;
// }
// int Mul( int x, int y)
// {
//     return x * y;
// }
// int Div( int x, int y)
// {
//     return x / y;
// }
// void calc(int(*pf)(int, int))
// {
//     int x= 0;
//     int y = 0;
//     int ret = 0;
//     printf("请输入2个操作符:>");
//     scanf("%d%d", &x, &y);
//     ret = (*pf)(x, y);
//     printf("%d\n", ret);
// }
// int main()
// {
//     int input = 0;
//     int x = 0;
//     int y = 0;
//     do
//     {
//         menu();
//         printf("请选择：>");
//         scanf("%d", &input);
//         int ret = 0;
//         switch (input)
//         {
//         case 1:
//             calc(Add);
//             break;
//         case 2:
//             calc(Sub);
//             break;
//         case 3:
//             calc(Mul);
//             break;
//         case 4:
//             calc(Div);
//             break;
//         case 0:
//             printf("退出程序\n");
//             break;
//         default:
//             printf("选择错误\n");
//             break;
//         }
//     } while (input);
//     return 0;
// }
//                                                                          数组拷贝
// char* string_copy(char *str1, char *str2)
// {
//     char * start = str2;
//     //拷贝数据
//     while (*str2++ = *str1++)
//     {
//         ;
//     }
//     return start;
// }
// int main()
// {
//     char arr1[] = "abcdef";
//     char arr2[20] = { 0 };
//     char *ret = string_copy(arr1, arr2);
//     printf("%s\n", ret);
//     return 0;
// }

//                                                                                   返回指针值的函数   
// int *search(int (*p)[4], int n)
// {
//     return *(p + n);
// }
// int main()
// {
//     int score[3][4] = {{1, 2, 3, 4}, {2, 3, 4, 5} , {3, 4, 5, 6}};
//     int n = 0;
//     printf("请输入学生的序号（0-2）:>");
//     scanf("%d", &n);
//     int *p = search(score, n);
//     int i = 0;
//     for (i = 0; i < 4; i++)
//     {
//         printf("%d ", *(p + i));
//     }
//     return 0;
// }

//                                                               指针数组排序
// void sort(char *str[], int n)
// {
//     int i = 0;
//     int j = 0;
//     //趟数
//     for (i = 0; i < n; i++)
//     {
//         for (j = 0; j < n-1-i; j++)
//         {
//             if (strcmp(str[j], str[j + 1]) > 0)
//             {
//                 char *tmp = str[j];
//                 str[j] = str[j + 1];
//                 str[j + 1] = tmp;
//             }
//         }
//     }
// }
// void print(char * str[], int n)
// {
//     int i = 0;
//     int j = 0;
//     for (i = 0; i < n; i++)
//     {
//         printf("%s\n", str[i]);
//     }
// }
// int main()
// {
//     // //char *str = "abcdef";
//     // char *str1 = "zhangsan";
//     // char *str2 = "lisi";
//     // char *str3 = "cuihua";
//     //字符指针数组
//     char *str[3] = {"zhangsan", "lisi", "cuihua"};
//     sort(str, 3);
//     print(str, 3);
//     return 0;
// }

//                                                                   指向指针数据的指针变量
// int main()
// {
//     int a = 10;
//     int * pa = &a;
//     int **ppa = &pa;//二级指针
//     return 0;
// }


// int main()
// {
//     char *str[3] = {"zhangsan", "lisi", "cuihua"};
//     char **p = str;
//     int i = 0;
//     for (i = 0; i < 3; i++)
//     {
//         printf("%s\n",*(p + i));
//     }
//     return 0;
// }
//argc argv命令参数
//envp 环境变量

// int main(int argc, char* argv[], char * envp[])
// {
//     int i = 0;
//     for (i = 0; i < argc; i++)
//     {
//         printf("%s\n", argv[i]);
//     }
//     getchar();
//     return 0;
// }


//动态内存分配
//自主申请
//自主释放
// int main()
// {
//     //申请10个整型的空间
//     int arr[10] = { 0 };//栈区
//     //动态申请-堆区
//     int * p = (int *)malloc(40);//向堆区申请40个字节的空间
//     //开辟失败返回NULL指针
//     if (p == NULL)
//     {
//         printf("动态内存申请失败\n");
//         return -1;
//     }
//     //使用动态申请的空间
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         *(p + i) = i;
//     }
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ", *(p + i));
//     }
//     //释放空间
//     free(p);
//     p = NULL;
//     return 0;
// }

// int main()
// {
//     //开辟一块连续的40个字节的空间
//     int * p = (int *)calloc(10,sizeof(int));
//     if (p == NULL)
//     {
//         printf("开辟失败\n");
//         return -1;
//     }
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ", *(p + i));
//     }
//     //发现开辟空间不够使用
//     //调整空间大小
//     int *ptr = (int*)realloc(p, 15*sizeof(int));
//     if(ptr != NULL)
//     {
//         p = ptr;
//     }
//     //释放空间
//     free(p);
//     p = NULL;
//     return 0;
// }

// int main()
// {
//     int a = 10;
//     int *pi = &a;
//     char *pc = NULL;

//     void *pv;//无类型指针
//     return 0;
// }

// int main()
// {
//     int a = 10;
//     char c = 'w';
//     float f = 3.14f;
    
//     void *p = &a;
//     p = &f;
//     return 0;
// }


// void check(int *p, int sz)
// {
//     int i = 0;
//     for (i = 0; i < sz; i++)
//     {
//         if (*(p + i) < 60)
//         {
//             printf("%d ", *(p + i));
//         }
//     }
// }

// int main()
// {
//     int *p =(int*)malloc(5*sizeof(int));
//     if (p == NULL)
//     {
//         printf("空间开辟失败\n");
//         return -1;
//     }
//     //输入5个学生的成绩
//     int i = 0;
//     for (i = 0; i < 5; i++)
//     {
//         scanf("%d", p + i);
//     }
//     //检查找出60分以下的成绩
//     check(p, 5);
//     //释放
//     free(p);
//     return 0;
// }



//                                                             第二遍学习
// int main()
// {
//     int a = 0;//a是创建在内存上的
//     //a = 20;//直接访问
//     int *p = &a;

//     return 0;
// }

// int main()
// {
//     int a = 0;
//     int *p = &a;
//     *p = 20;//解引用操作
//     printf("%d\n", a);
//     printf("%d\n", *p);
//     return 0;
// }

// int main()
// {
//     int a = 10;
//     int b = 20;
//     int *p1;
//     int *p2;
//     int *p1, *p2;//两个都是指针
//     int *p1, p2;//p1是指针，p2不是
//     return 0;
// }

// int main()
// {
//     int a = 10;
//     int *pa = &a;
//     printf("%d\n",*pa);//引用指针变量指向的变量
//     printf("0X%x\n", pa);
//     printf("%p\n",pa);
//     return 0;
// }

// int main()
// {
//     int a = 0;
//     int b = 0;
//     scanf("%d%d", &a, &b);
//     int *pa = &a;
//     int *pb = &b;
//     // if (a < b)
//     // {
//     //     int *tmp = pa;
//     //     pa = pb;
//     //     pb = tmp;
//     // }
//     if (a < b)
//     {
//         int tmp = *pa;
//         *pa = *pb;
//         *pb = tmp;
//     }
//     printf("%d %d\n", *pa, *pb);
//     return 0;
// }

//                                                  交换两个整型变量
// void swap(int *pa, int *pb)
// {
//     int tmp = 0;
//     tmp = *pa;
//     *pa = *pb;
//     *pb = tmp;
// }
// int main()
// {
//     int a = 10;
//     int b = 20;
//     printf("交换前：a=%d b=%d\n", a, b);
//     swap(&a,&b);
//     printf("交换后：a=%d b=%d\n",a, b);
//     return 0;
// }

// void swap(int *pa, int *pb)
// {
//     int tmp = 0;
//     tmp = *pa;
//     *pa = *pb;
//     *pb = tmp;
// }
// void Exchange(int *p1, int *p2, int *p3)
// {
//     if (*p1 < *p2)
//     {
//         swap(p1, p2);
//     }
//     if (*p1 < *p3)
//     {
//         swap(p1,p3);
//     }
//     if (*p2 < *p3)
//     {
//         swap(p2,p3);
//     }
// }
// int main()
// {
//     int a= 0, b = 0, c = 0;
//     scanf("%d%d%d", &a, &b, &c);
//     Exchange(&a, &b, &c);
//     printf("%d %d %d\n", a, b, c);
//     return 0;
// }

// int main()
// {
//     int arr[10] = {0};
//     int *pa = arr;
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%p\n", (pa + i));
//     }
//     return 0;
// }

// int main()
// {
//     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//     int *pa = arr;
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ", *(pa + i));
//     }
//     return 0;
// }

// int main()
// {
//     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//     int *p1 = &arr[0];
//     int *p2 = &arr[9];
//     int i = 0;
//     printf("%d\n",p2 - p1);
//     return 0;
// }

// int main()
// {
//     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//     int *pa = arr;
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ", *pa);
//         pa++;
//     }
//     return 0;
// }

// void set(int *p, int sz)
// {
//     int i = 0;
//     for (i = 0; i < sz; i++)
//     {
//         *p = i;
//         p++;
//     }
// }
// void print(int *p, int sz)
// {
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ", *p++);
//     }
// }
// int main()
// {
//     int arr[10] = {0};
//     int sz = sizeof(arr)/sizeof(arr[0]);
//     set(arr,sz);
//     print(arr,sz);
//     return 0;
// }

// void print(int *p, int sz)
// {
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ", *p++);
//     }
// }
// // void move(int arr[], int sz)
// // {
// //     int left = 0;
// //     int right = sz - 1;
// //     while (left < right)
// //     {
// //         int tmp = arr[left];
// //         arr[left] = arr[right];
// //         arr[right] = tmp;
// //         left++;
// //         right--;
// //     }
// // }
// void move(int *p, int sz)
// {
//     int *left = p;
//     int *right = p+sz - 1;
//     while (left < right)
//     {
//         int tmp = *left;
//         *left = *right;
//         *right = tmp;
//         *left++;
//         *right--;
//     }
// }
// int main()
// {
//     int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
//     move(arr, 10);
//     print(arr, 10);
//     return 0;
// }

// int main()
// {
//     int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
//     int *p = &arr[0][0];
//     //int *p = arr[0];
//     int i = 0;
//     for (i = 0; i < 12; i++)
//     {
//         printf("%d ", *(p + i));
//     }
//     return 0; 
// }

// int main()
// {
//     int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
//     int (*p)[4] = arr;
//     int i = 0;
//     for (i = 0; i < 3; i++)
//     {
//         int j = 0;
//         for (j = 0; j < 4; j++)
//         {
//             printf("%d ",*(*(p + i) + j));
//         }
//     }
//     return 0;
// }

// void print(int arr[3][4], int i, int j)
// {
//     for (i = 0; i < 3; i++)
//     {
//         for (j = 0; j < 4; j++)
//         {
//             printf("%d ",arr[i][j]);
//         }
//     }
// }
// void print(int (*p)[4], int row, int col)
// {
//     int i = 0;
//     int j = 0;
//     for (i = 0; i < row; i++)
//     {
//         for (j = 0; j < col; j++)
//         {
//             printf("%d ", *(*(p + i) +j));
//         }
//     }
// }
// int main()
// {
//     int arr[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
//     print(arr,3,4);
//     return 0;
// }

// int main()
// {
//     char arr[] = "hello world";
//     printf("%c\n", arr[6]);
//     printf("%s\n",arr);
//     return 0;
// }

// int main()
// {
//     char *str = "hello world";
//     printf("%s\n", str);
// }

// int main()
// {
//     char a[20] = "i am a student";
//     char b[20] = { 0 };
//     int i = 0;
//     for (i = 0; a[i] != '\0'; i++)
//     {
//         b[i] = a[i];
//     }
//     b[i] = a[i];
//     printf("%s\n", a);
//     printf("%s\n", b);
//     return 0;
// }
// int main()
// {
//     char a[20] = "i am a student";
//     char b[20] = { 0 };
//     int i = 0;
//     while (a[i] != '\0')
//     {
//         b[i] = a[i];
//         i++;
//     }
//     b[i] = a[i];
//     printf("%s\n", a);
//     printf("%s\n", b);
//     return 0;
// }
// int main()
// {
//     char a[20] = "i am a student";
//     char b[20] = { 0 };
//     int i = 0;
//     char *pa=a;
//     char *pb=b;
//     while (*(pa + i) != '\0')
//     {
//         *(pb + i) = *(pa + i);
//         i++;
//     }
//     *(pb + i) = *(pa + i);
//     printf("%s\n", a);
//     printf("%s\n", b);
//     return 0;
// }


// void copy_string(char *from, char *to)
// {
//     while (*from != '\0')
//     {
//         *to = *from;
//         to++;
//         from++;
//     }
//     *to = *from;
// }
// void copy_string(char *from, char *to)
// {
//     while (*to++ = *from++)
//     {
//         ;
//     }
// }
// int main()
// {
//     char a[20] = "i am a student";
//     char b[20] = { 0 };
//     copy_string(a,b);
//     printf("%s\n", a);
//     printf("%s\n", b);
//     return 0;
// }

// int main()
// {
//     char *p = "abcdef";
//     char arr[] = "abcdef";
//     return 0;
// }



// void copy_string(char *from, char *to)
// {
//     while (*to++ = *from++)
//     {
//         ;
//     }
// }
// int main()
// {
//     char a[]="abcdef";
//     char b[20]={0};
//     void (*cp)(char*,char*) = copy_string;
//     copy_string(a, b);
//     return 0;
// }


// int Max(int x, int y)
// {
//     return x > y ? x : y;
// }
// int Min(int x, int y)
// {
//     return x > y ? y : x;
// }
// int main()
// {
//     int a = 0;
//     int b = 0;
//     int n = 0;
//     int (*pf)(int,int) = NULL;
//     printf("请输入两个数字:>");
//     scanf("%d%d", &a, &b);
//     printf("请选择（1/2）:>");
//     scanf("%d", &n);
//     if (n == 1)
//     {
//         pf = Max;
//     }
//     else if(n == 2)
//     {
//         pf = Min;
//     }
//     int ret = (*pf)(a, b);
//     printf("%d\n", ret);
//     return 0;
// }

// void menu()
// {
//     printf("************************************\n");
//     printf("******* 1.add       2.sub       ****\n");
//     printf("******* 3.mul       4.div       ****\n");
//     printf("******* 0.exit                  ****\n");
//     printf("************************************\n");
// }
// int Add(int x, int y)
// {
//     return x + y;
// }
// int Sub( int x, int y)
// {
//     return x - y;
// }
// int Mul( int x, int y)
// {
//     return x * y;
// }
// int Div( int x, int y)
// {
//     return x / y;
// }
// int main()
// {
//     int input = 0;
//     int x = 0;
//     int y = 0;
//     int ret = 0;
//     do
//     {
//         menu;
//         printf("请选择:>");
//         scanf("%d",&input);
//         switch (input)
//         {
//         case 1:
//             printf("输入两个数字:>");
//             scanf("%d%d", &x, &y);
//             ret = Add(x,y);
//             printf("%d\n",ret);
//             break;
//         case 2:
//             printf("输入两个数字:>");
//             scanf("%d%d", &x, &y);
//             ret = Sub(x,y);
//             printf("%d\n",ret);
//             break;
//         case 3:
//             printf("输入两个数字:>");
//             scanf("%d%d", &x, &y);
//             ret = Mul(x,y);
//             printf("%d\n",ret);
//             break;
//         case 4:
//             printf("输入两个数字:>");
//             scanf("%d%d", &x, &y);
//             ret = Div(x,y);
//             printf("%d\n",ret);
//             break;
//         case 0:
//             printf("退出程序\n");
//             break;
//         default:
//         printf("选择错误\n");
//             break;
//         }
//     } while (input);
    
//     return 0;
// }
// void menu()
// {
//     printf("************************************\n");
//     printf("******* 1.add       2.sub       ****\n");
//     printf("******* 3.mul       4.div       ****\n");
//     printf("******* 0.exit                  ****\n");
//     printf("************************************\n");
// }
// int Add(int x, int y)
// {
//     return x + y;
// }
// int Sub( int x, int y)
// {
//     return x - y;
// }
// int Mul( int x, int y)
// {
//     return x * y;
// }
// int Div( int x, int y)
// {
//     return x / y;
// }
// void calc(int(*pf)(int, int))
// {
//     int x= 0;
//     int y = 0;
//     int ret = 0;
//     printf("请输入2个操作符:>");
//     scanf("%d%d", &x, &y);
//     ret = (*pf)(x, y);
//     printf("%d\n", ret);
// }
// int main()
// {
//     int input = 0;
//     int x = 0;
//     int y = 0;
//     do
//     {
//         menu();
//         printf("请选择：>");
//         scanf("%d", &input);
//         int ret = 0;
//         switch (input)
//         {
//         case 1:
//             calc(Add);
//             break;
//         case 2:
//             calc(Sub);
//             break;
//         case 3:
//             calc(Mul);
//             break;
//         case 4:
//             calc(Div);
//             break;
//         case 0:
//             printf("退出程序\n");
//             break;
//         default:
//             printf("选择错误\n");
//             break;
//         }
//     } while (input);
//     return 0;
// }

// char* string_copy(char *str1, char *str2)
// {
//     char *start = str2;
//     while (*str2++ = *str1++)
//     {
//         ;
//     }
//     return start;
// }
// int main()
// {
//     char arr1[] = "abcdef";
//     char arr2[20] = { 0 };
//     char *ret = string_copy(arr1, arr2);
//     printf("%s\n", ret);
//     return 0;
// }

// int *search(int (*p)[4], int n)
// {
//     return *(p + n);
// }
// int main()
// {
//     int score[3][4] = {{1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}};
//     int n = 0;
//     printf("请输入学生的序号(0-2):>");
//     scanf("%d",&n);
//     int *p = search(score,n);
//     int i = 0;
//     for (i = 0; i < 4; i++)
//     {
//         printf("%d ",*(p + i));
//     }
//     return 0;
// }

// void sort(char *str[], int n)
// {
//     int i = 0;
//     int j = 0;
//     for (i = 0; i < n-1; i++)
//     {
//         for (j = 0; j < n-1-i; j++)
//         {
//             if (strcmp(str[j],str[j + 1])>0)
//             {
//                 char *tmp = str[j];
//                 str[j] = str[j + 1];
//                 str[j + 1] = tmp;
//             }
//         }
//     }
// }
// void print(char *str[], int n)
// {
//     int i = 0;
//     for(i = 0; i < n; i++)
//     {
//         printf("%s\n",str[i]);
//     }
// }
// int main()
// {
//     char *str[3] = {"weisihao", "haohao", "goudan"};
//     sort(str, 3);
//     print(str,3);
//     return 0;
// }


// int main()
// {
//     char *str[3] = {"weisihao", "haohao", "goudan"};
//     char **p = str;
//     return 0;
// }


// int main(int argc, char *argv[], char *envp[])
// {
//     int i = 0;
//     for (i = 0; i < argc; i++)
//     {
//         printf("%s\n", argv[i]);
//     }
//     return 0;
// }


// int main()
// {
//     int arr[10] = { 0 };
//     int *p = (int*)malloc(40);
//     if (p == NULL)
//     {
//         printf("动态内存申请失败\n");
//         return -1;
//     }
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         *(p + i) = i;
//     }
//     free(p);
//     p = NULL;
//     return 0;
// }


// int main()
// {
//     int *p = (int*)calloc(10, sizeof(int));
//     if (p == NULL)
//     {
//         printf("开辟失败\n");
//         return -1;
//     }
//     int i = 0;
//     for (i = 0; i < 10; i++)
//     {
//         printf("%d ",*(p + i));
//     }
//     int *ptr = (int*)realloc(p, 15*sizeof(int));
//     if(ptr != NULL)
//     {
//         p = ptr;
//     }
//     free(p);
//     p = NULL;
//     return 0;
// }


// int main()
// {
//     int a = 0;
//     int *pi = &a;
//     char *pc = NULL;

//     return 0;
// }

// int main()
// {
//     int a = 10;
//     char c = 'w';
//     float f = 3.14f;
//     void *p = &a;

//     //int *p = &a;
//     //p = &f;//错误，类型不同
    
//     return 0;
// }

void check(int *p, int sz)
{
    int i =0;
    for (i = 0; i < sz; i++)
    {
        if (*(p + i) < 60)
        {
            printf("%d ", *(p + i));
        }
    }
}
int main()
{
    int *p = (int*)malloc(5*sizeof(int));
    if (p == NULL)
    {
        printf("开辟失败\n");
        return -1;
    }
    int i = 0;
    for (i = 0; i < 5; i++)
    {
        scanf("%d",p + i);
    }
    check(p, 5);
    free(p);
    p = NULL;
    return 0;
}